package com.cong.modules.base;

import java.beans.PropertyEditorSupport;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.cong.common.util.DateUtils;
import com.cong.config.shiro.ShiroUtils;
import com.cong.modules.sys.model.SysUser;

/**
 * 基础控制器
 */
public class BaseController {

	protected Logger logger = LoggerFactory.getLogger(this.getClass());

	/**
	 * 将前台传递过来的日期格式的字符串，自动转化为Date类型转换
	 */
	@InitBinder
	public void initBinder(WebDataBinder binder) {
		binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
			@Override
			public void setAsText(String text) {
				setValue(DateUtils.parseDate(text));
			}
		});
	}

	/**
	 * 重定向至地址 url
	 *
	 * @param url 请求地址
	 * @return 返回跳转地址页面
	 */
	protected String redirectTo(String url) {
        return "redirect:" + url;
	}

	/**
	 *
	 * 返回 JSON 格式对象
	 *
	 * @param object 转换对象
	 * @return 返回json数据
	 */
	protected String toJson(Object object) {
		return JSON.toJSONString(object, SerializerFeature.BrowserCompatible);
	}

	/**
	 *
	 * 返回 JSON 格式对象
	 *
	 * @param object   转换对象
	 * @param format 序列化特点
	 * @return 返回json数据
	 */
	protected String toJson(Object object, String format) {
		if (format == null) {
			return toJson(object);
		}
		return JSON.toJSONStringWithDateFormat(object, format, SerializerFeature.WriteDateUseDateFormat);
	}

	/**
	 * 获取用户缓存信息
	 */
	public SysUser getSysUser() {
		return ShiroUtils.getUser();
	}

	/**
	 * 获取登录用户id
	 */
	public Long getUserId() {
		return getSysUser().getUserId();
	}

}
